//package com.juyu.miliao.api.service;
//
//import static java.util.Comparator.comparing;
//import static java.util.stream.Collectors.toList;
//
//import java.time.LocalDate;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.List;
//import java.util.Set;
//
//import javax.annotation.Resource;
//
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.data.redis.core.ZSetOperations.TypedTuple;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import com.juyu.miliao.api.dao.mysql.BillDetailDao;
//import com.juyu.miliao.api.dao.mysql.UserCountDao;
//import com.juyu.miliao.api.dao.mysql.UserInfoDao;
//import com.juyu.miliao.api.dao.mysql.UserVipDao;
//import com.juyu.miliao.api.domain.BillDetail;
//import com.juyu.miliao.api.domain.User;
//import com.juyu.miliao.api.domain.UserCount;
//import com.juyu.miliao.api.domain.UserVip;
//
//@Component
//public class QuartzService {/*
//	@Resource
//	UserCountDao userCountDao;
//	@Resource
//	BillDetailDao billDetailDao;
//	@Resource
//	RedisTemplateService redisTemplateService;
//	@Resource
//	UserVipDao userVipDao;
//	@Resource
//	UserInfoDao userInfoDao;
//	@Resource
//	StringRedisTemplate stringRedisTemplate;
//
//	// 计算M、V等级定时任务开始
//	// 每天00：01启动
//	@Scheduled(cron = "0 01 00 * * ?")
//	public void timerToNow() {
//		System.out.println("计算M、V等级定时任务开始：");
//		System.out.println("时间-" + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
//		// 取当前日期
//		LocalDate now = LocalDate.now();
//		DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
//		// 取三个月前日期
//		String threeWeeks = now.minusMonths(3).format(dtf);
//		String Tomorrow = now.minusMonths(3).plusDays(1).format(dtf);
//		System.out.println("三个月前日期为:" + threeWeeks);
//		// 取userCount数据
//		List<UserCount> userCountList = userCountDao.findUserCountMVGradeSum();
//		userCountList.forEach(userCount -> {
//			// 计算三个月前日期当天的m值
//			// 如果mGradeSum为空 就跳过，因为已经是0就没得再减了
//			if (userCount.getmGradeSum() > 0) {
//				BillDetail billDiamond = billDetailDao.findDiamondSumByDay(userCount.getUserId(), threeWeeks, Tomorrow);
//				if (billDiamond != null) {
//					userCountDao.reduceMGradeSum(userCount.getUserId(), billDiamond.getDiamond());
//				}
//			}
//			// 计算三个月前日期当天的v值
//			if (userCount.getvGradeSum() > 0) {
//				BillDetail billSpend = billDetailDao.findSpendSumByDay(userCount.getUserId(), threeWeeks, Tomorrow);
//				if (billSpend != null) {
//					userCountDao.reduceVGradeSum(userCount.getUserId(), billSpend.getSpend());
//				}
//			}
//		});
//		System.out.println("结束定时任务：");
//		System.out.println("时间-" + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
//		// 清理排行榜
//		userSortQuartz();
//		// vip定时任务逻辑
//		vipQuartz();
//	}
//
//	*//**
//	 * vip定时任务逻辑
//	 *//*
//	public void vipQuartz() {
//		List<UserVip> userVip = userVipDao.getUserVipListByStatus();
//		if (userVip.size() == 0)
//			return;
//		userVip.forEach(i -> {
//			userVipDao.updateUserVipDate(i.getUserVipId());
//			if ((i.getVipDate() - 1) == 0) {
//				userVipDao.updateUserVipStatusByUserVipId(i.getUserVipId());
//				userInfoDao.updateUserIsVip(2, i.getUserId());
//			}
//		});
//	}
//
//	*//**
//	 * 清理排行榜
//	 *//*
//	public void userSortQuartz() {
//		System.out.println("排行榜定时任务开始：");
//		System.out.println("时间-" + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
//		// 清理每日排行榜数据
//		Long temp = redisTemplateService.removeUserSortDay("m:day");
//		System.out.println("m:day清除数据量：" + temp);
//		temp = redisTemplateService.removeUserSortDay("v:day");
//		System.out.println("v:day清除数据量：" + temp);
//		// 判断是否是周一 如果是周一清除week数据
//		LocalDateTime now = LocalDateTime.now();// 取当前日期
//		int week = now.getDayOfWeek().getValue();
//		System.out.println("今天是周" + week);
//		if (week == 1) {
//			System.out.println("清理排行榜week周数据：");
//			temp = redisTemplateService.removeUserSortDay("m:week");
//			System.out.println("m:week清除数据量：" + temp);
//			temp = redisTemplateService.removeUserSortDay("v:week");
//			System.out.println("v:week清除数据量：" + temp);
//		}
//		System.out.println("结束排行榜定时任务：");
//		System.out.println("时间-" + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME));
//	}
//
//	*//**
//	 * 首页 热门 新人 免费 排序查询
//	 *//*
//	@Scheduled(cron = "0 0/5 * * * ?")
//	public void bannerSortQuartz() {
//
//		*//** 查询热门 *//*
//		List<User> hotSortUserList = userInfoDao.getHotSortUserList();
//		// 排序
//		List<User> collectHot = hotSortUserList.stream()
//				.sorted(comparing(User::getIsVip).thenComparing(User::getmGradeSum).reversed())
//				.collect(toList());
//		if (collectHot.size() > 300) {
//			collectHot = collectHot.subList(0, 300);
//		}
//		//清空
//		stringRedisTemplate.opsForZSet().removeRange("bannerSort:hot", 0, -1);
//		for (int i = 0; i < collectHot.size(); i++) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:hot", String.valueOf(collectHot.get(i).getUserId()), i);
//		}
//		// 加入自定义排序
//		Set<TypedTuple<String>> tuplesHot = stringRedisTemplate.opsForZSet().rangeWithScores("userDefineSort:hot", 0,
//				-1);
//		if (!tuplesHot.isEmpty()) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:hot", tuplesHot);
//		}
//
//		*//** 查询新人 *//*
//		List<User> newSortUserList = userInfoDao.getNewSortUserList();
//		// 排序 isvip createTime
//		List<User> collectNew = newSortUserList.stream()
//				.sorted(comparing(User::getIsVip).thenComparing(User::getCreateTime).reversed())
//				.collect(toList());
//		if (collectHot.size() > 300) {
//			collectHot = collectHot.subList(0, 300);
//		}
//		//清空
//		stringRedisTemplate.opsForZSet().removeRange("bannerSort:new", 0, -1);
//		for (int i = 0; i < collectNew.size(); i++) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:new", String.valueOf(collectNew.get(i).getUserId()), i);
//		}
//		// 加入自定义排序
//		Set<TypedTuple<String>> tuplesNew = stringRedisTemplate.opsForZSet().rangeWithScores("userDefineSort:new", 0,
//				-1);
//		if (!tuplesNew.isEmpty()) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:new", tuplesNew);
//		}
//
//		*//** 查询免费 *//*
//		List<User> NotBuySortUserList = userInfoDao.notBuySortUserList();
//		// 排序 icon createTime
//		List<User> collectNotBuy = NotBuySortUserList.stream().sorted(comparing(User::getIsVip)
//				.thenComparing(User::getVideoPrice).reversed().thenComparing(User::getChatPrice).reversed())
//				.collect(toList());
//		if (collectHot.size() > 300) {
//			collectHot = collectHot.subList(0, 300);
//		}
//		//清空
//		stringRedisTemplate.opsForZSet().removeRange("bannerSort:notBuy", 0, -1);
//		for (int i = 0; i < collectNotBuy.size(); i++) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:notBuy", String.valueOf(collectNotBuy.get(i).getUserId()),
//					i);
//		}
//		// 加入自定义排序
//		Set<TypedTuple<String>> tuplesNotBuy = stringRedisTemplate.opsForZSet().rangeWithScores("userDefineSort:notBuy",
//				0, -1);
//		if (!tuplesNotBuy.isEmpty()) {
//			stringRedisTemplate.opsForZSet().add("bannerSort:notBuy", tuplesNotBuy);
//		}
//
//		*//** 清除缓存 *//*
//		for (int i = 1; i < 4; i++) {
//			for (int j = 0; j < 30; j++) {
//				stringRedisTemplate.delete("bannerCache::" + i + "-" + j);
//			}
//		}
//	}
//*/}
